using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using log4net;

namespace CmisSync.Lib.Cmis
{
    /// <summary>
    /// Utility to find a file's MIME type.
    /// The current implementation relies on file extension.
    /// </summary>
    public static class MimeType
    {
        /// <summary>
        /// Log.
        /// </summary>
        private static readonly ILog Logger = LogManager.GetLogger(typeof(MimeType));


        /// <summary>
        /// Guess the MIME type of a file.
        /// </summary>
        /// <param name="fileName">Relative filename, for instance mydoc.odt</param>
        /// <returns>MIME type, for instance </returns>
        public static string GetMIMEType(string fileName)
        {
            // If no extension or no match, return generic MIME type.
            string result = "application/octet-stream";
            
            string extensionWithDot = Path.GetExtension(fileName);
            if (extensionWithDot.Length > 1)  /* File with an extension */
            {
                string extension = Path.GetExtension(fileName).Remove(0, 1);
                if (extension2mime.ContainsKey(extension))
                {
                    result = extension2mime[extension];
                }
            }

            Logger.Debug("Filename to MIME: " + fileName + "->" + result);
            return result;
        }


        /*public static string GetExtension(string mimeType)
        {
            string result = null;
            if (mimeType != null && mimeType.Length > 0
                && mime2extension.ContainsKey(mimeType))
            {
                result = mime2extension[mimeType];
            }
            else
            {
                // If no such MIME type, return default extension: "unk" for "unknown"
                result = "unk";
            }

            Logger.Debug("MIME to extension: " + mimeType + "->" + result);
            return result;
        }*/


        /// <summary>
        /// Static constructor to set <c>MIMETypesDictionary</c>
        /// </summary>
        static MimeType()
        {
            string[,] types = new string[,]
            {
                {"123", "application/vnd.lotus-1-2-3"},
                {"3dml", "text/vnd.in3d.3dml"},
                {"3ds", "image/x-3ds"},
                {"3g2", "video/3gpp2"},
                {"3gp", "video/3gpp"},
                {"7z", "application/x-7z-compressed"},
                {"aab", "application/x-authorware-bin"},
                {"aac", "audio/x-aac"},
                {"aam", "application/x-authorware-map"},
                {"aas", "application/x-authorware-seg"},
                {"abw", "application/x-abiword"},
                {"ac", "application/pkix-attr-cert"},
                {"acc", "application/vnd.americandynamics.acc"},
                {"ace", "application/x-ace-compressed"},
                {"acu", "application/vnd.acucobol"},
                {"acutc", "application/vnd.acucorp"},
                {"adp", "audio/adpcm"},
                {"aep", "application/vnd.audiograph"},
                {"afm", "application/x-font-type1"},
                {"afp", "application/vnd.ibm.modcap"},
                {"ahead", "application/vnd.ahead.space"},
                {"ai", "application/postscript"},
                {"aif", "audio/x-aiff"},
                {"aifc", "audio/x-aiff"},
                {"aiff", "audio/x-aiff"},
                {"air", "application/vnd.adobe.air-application-installer-package+zip"},
                {"ait", "application/vnd.dvb.ait"},
                {"ami", "application/vnd.amiga.ami"},
                {"apk", "application/vnd.android.package-archive"},
                {"appcache", "text/cache-manifest"},
                {"application", "application/x-ms-application"},
                {"apr", "application/vnd.lotus-approach"},
                {"arc", "application/x-freearc"},
                {"asc", "application/pgp-signature"},
                {"asf", "video/x-ms-asf"},
                {"asm", "text/x-asm"},
                {"aso", "application/vnd.accpac.simply.aso"},
                {"asx", "video/x-ms-asf"},
                {"atc", "application/vnd.acucorp"},
                {"atom", "application/atom+xml"},
                {"atomcat", "application/atomcat+xml"},
                {"atomsvc", "application/atomsvc+xml"},
                {"atx", "application/vnd.antix.game-component"},
                {"au", "audio/basic"},
                {"avi", "video/x-msvideo"},
                {"aw", "application/applixware"},
                {"azf", "application/vnd.airzip.filesecure.azf"},
                {"azs", "application/vnd.airzip.filesecure.azs"},
                {"azw", "application/vnd.amazon.ebook"},
                {"bat", "application/x-msdownload"},
                {"bcpio", "application/x-bcpio"},
                {"bdf", "application/x-font-bdf"},
                {"bdm", "application/vnd.syncml.dm+wbxml"},
                {"bed", "application/vnd.realvnc.bed"},
                {"bh2", "application/vnd.fujitsu.oasysprs"},
                {"bin", "application/octet-stream"},
                {"blb", "application/x-blorb"},
                {"blorb", "application/x-blorb"},
                {"bmi", "application/vnd.bmi"},
                {"bmp", "image/bmp"},
                {"book", "application/vnd.framemaker"},
                {"box", "application/vnd.previewsystems.box"},
                {"boz", "application/x-bzip2"},
                {"bpk", "application/octet-stream"},
                {"btif", "image/prs.btif"},
                {"bz2", "application/x-bzip2"},
                {"bz", "application/x-bzip"},
                {"c11amc", "application/vnd.cluetrust.cartomobile-config"},
                {"c11amz", "application/vnd.cluetrust.cartomobile-config-pkg"},
                {"c4d", "application/vnd.clonk.c4group"},
                {"c4f", "application/vnd.clonk.c4group"},
                {"c4g", "application/vnd.clonk.c4group"},
                {"c4p", "application/vnd.clonk.c4group"},
                {"c4u", "application/vnd.clonk.c4group"},
                {"cab", "application/vnd.ms-cab-compressed"},
                {"caf", "audio/x-caf"},
                {"cap", "application/vnd.tcpdump.pcap"},
                {"car", "application/vnd.curl.car"},
                {"cat", "application/vnd.ms-pki.seccat"},
                {"cb7", "application/x-cbr"},
                {"cba", "application/x-cbr"},
                {"cbr", "application/x-cbr"},
                {"cbt", "application/x-cbr"},
                {"cbz", "application/x-cbr"},
                {"cct", "application/x-director"},
                {"cc", "text/x-c"},
                {"ccxml", "application/ccxml+xml"},
                {"cdbcmsg", "application/vnd.contact.cmsg"},
                {"cdf", "application/x-netcdf"},
                {"cdkey", "application/vnd.mediastation.cdkey"},
                {"cdmia", "application/cdmi-capability"},
                {"cdmic", "application/cdmi-container"},
                {"cdmid", "application/cdmi-domain"},
                {"cdmio", "application/cdmi-object"},
                {"cdmiq", "application/cdmi-queue"},
                {"cdx", "chemical/x-cdx"},
                {"cdxml", "application/vnd.chemdraw+xml"},
                {"cdy", "application/vnd.cinderella"},
                {"cer", "application/pkix-cert"},
                {"cfs", "application/x-cfs-compressed"},
                {"cgm", "image/cgm"},
                {"chat", "application/x-chat"},
                {"chm", "application/vnd.ms-htmlhelp"},
                {"chrt", "application/vnd.kde.kchart"},
                {"cif", "chemical/x-cif"},
                {"cii", "application/vnd.anser-web-certificate-issue-initiation"},
                {"cil", "application/vnd.ms-artgalry"},
                {"cla", "application/vnd.claymore"},
                {"class", "application/java-vm"},
                {"clkk", "application/vnd.crick.clicker.keyboard"},
                {"clkp", "application/vnd.crick.clicker.palette"},
                {"clkt", "application/vnd.crick.clicker.template"},
                {"clkw", "application/vnd.crick.clicker.wordbank"},
                {"clkx", "application/vnd.crick.clicker"},
                {"clp", "application/x-msclip"},
                {"cmc", "application/vnd.cosmocaller"},
                {"cmdf", "chemical/x-cmdf"},
                {"cml", "chemical/x-cml"},
                {"cmp", "application/vnd.yellowriver-custom-menu"},
                {"cmx", "image/x-cmx"},
                {"cod", "application/vnd.rim.cod"},
                {"com", "application/x-msdownload"},
                {"conf", "text/plain"},
                {"cpio", "application/x-cpio"},
                {"cpp", "text/x-c"},
                {"cpt", "application/mac-compactpro"},
                {"crd", "application/x-mscardfile"},
                {"crl", "application/pkix-crl"},
                {"crt", "application/x-x509-ca-cert"},
                {"cryptonote", "application/vnd.rig.cryptonote"},
                {"csh", "application/x-csh"},
                {"csml", "chemical/x-csml"},
                {"csp", "application/vnd.commonspace"},
                {"css", "text/css"},
                {"cst", "application/x-director"},
                {"csv", "text/csv"},
                {"c", "text/x-c"},
                {"cu", "application/cu-seeme"},
                {"curl", "text/vnd.curl"},
                {"cww", "application/prs.cww"},
                {"cxt", "application/x-director"},
                {"cxx", "text/x-c"},
                {"dae", "model/vnd.collada+xml"},
                {"daf", "application/vnd.mobius.daf"},
                {"dart", "application/vnd.dart"},
                {"dataless", "application/vnd.fdsn.seed"},
                {"davmount", "application/davmount+xml"},
                {"dbk", "application/docbook+xml"},
                {"dcr", "application/x-director"},
                {"dcurl", "text/vnd.curl.dcurl"},
                {"dd2", "application/vnd.oma.dd2+xml"},
                {"ddd", "application/vnd.fujixerox.ddd"},
                {"deb", "application/x-debian-package"},
                {"def", "text/plain"},
                {"deploy", "application/octet-stream"},
                {"der", "application/x-x509-ca-cert"},
                {"dfac", "application/vnd.dreamfactory"},
                {"dgc", "application/x-dgc-compressed"},
                {"dic", "text/x-c"},
                {"dir", "application/x-director"},
                {"dis", "application/vnd.mobius.dis"},
                {"dist", "application/octet-stream"},
                {"distz", "application/octet-stream"},
                {"djv", "image/vnd.djvu"},
                {"djvu", "image/vnd.djvu"},
                {"dll", "application/x-msdownload"},
                {"dmg", "application/x-apple-diskimage"},
                {"dmp", "application/vnd.tcpdump.pcap"},
                {"dms", "application/octet-stream"},
                {"dna", "application/vnd.dna"},
                {"doc", "application/msword"},
                {"docm", "application/vnd.ms-word.document.macroenabled.12"},
                {"docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
                {"dot", "application/msword"},
                {"dotm", "application/vnd.ms-word.template.macroenabled.12"},
                {"dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
                {"dp", "application/vnd.osgi.dp"},
                {"dpg", "application/vnd.dpgraph"},
                {"dra", "audio/vnd.dra"},
                {"dsc", "text/prs.lines.tag"},
                {"dssc", "application/dssc+der"},
                {"dtb", "application/x-dtbook+xml"},
                {"dtd", "application/xml-dtd"},
                {"dts", "audio/vnd.dts"},
                {"dtshd", "audio/vnd.dts.hd"},
                {"dump", "application/octet-stream"},
                {"dvb", "video/vnd.dvb.file"},
                {"dvi", "application/x-dvi"},
                {"dwf", "model/vnd.dwf"},
                {"dwg", "image/vnd.dwg"},
                {"dxf", "image/vnd.dxf"},
                {"dxp", "application/vnd.spotfire.dxp"},
                {"dxr", "application/x-director"},
                {"ecelp4800", "audio/vnd.nuera.ecelp4800"},
                {"ecelp7470", "audio/vnd.nuera.ecelp7470"},
                {"ecelp9600", "audio/vnd.nuera.ecelp9600"},
                {"ecma", "application/ecmascript"},
                {"edm", "application/vnd.novadigm.edm"},
                {"edx", "application/vnd.novadigm.edx"},
                {"efif", "application/vnd.picsel"},
                {"ei6", "application/vnd.pg.osasli"},
                {"elc", "application/octet-stream"},
                {"emf", "application/x-msmetafile"},
                {"eml", "message/rfc822"},
                {"emma", "application/emma+xml"},
                {"emz", "application/x-msmetafile"},
                {"eol", "audio/vnd.digital-winds"},
                {"eot", "application/vnd.ms-fontobject"},
                {"eps", "application/postscript"},
                {"epub", "application/epub+zip"},
                {"es3", "application/vnd.eszigno3+xml"},
                {"esa", "application/vnd.osgi.subsystem"},
                {"esf", "application/vnd.epson.esf"},
                {"et3", "application/vnd.eszigno3+xml"},
                {"etx", "text/x-setext"},
                {"eva", "application/x-eva"},
                {"evy", "application/x-envoy"},
                {"exe", "application/x-msdownload"},
                {"exi", "application/exi"},
                {"ext", "application/vnd.novadigm.ext"},
                {"ez2", "application/vnd.ezpix-album"},
                {"ez3", "application/vnd.ezpix-package"},
                {"ez", "application/andrew-inset"},
                {"f4v", "video/x-f4v"},
                {"f77", "text/x-fortran"},
                {"f90", "text/x-fortran"},
                {"fbs", "image/vnd.fastbidsheet"},
                {"fcdt", "application/vnd.adobe.formscentral.fcdt"},
                {"fcs", "application/vnd.isac.fcs"},
                {"fdf", "application/vnd.fdf"},
                {"fe_launch", "application/vnd.denovo.fcselayout-link"},
                {"fg5", "application/vnd.fujitsu.oasysgp"},
                {"fgd", "application/x-director"},
                {"fh4", "image/x-freehand"},
                {"fh5", "image/x-freehand"},
                {"fh7", "image/x-freehand"},
                {"fhc", "image/x-freehand"},
                {"fh", "image/x-freehand"},
                {"fig", "application/x-xfig"},
                {"flac", "audio/x-flac"},
                {"fli", "video/x-fli"},
                {"flo", "application/vnd.micrografx.flo"},
                {"flv", "video/x-flv"},
                {"flw", "application/vnd.kde.kivio"},
                {"flx", "text/vnd.fmi.flexstor"},
                {"fly", "text/vnd.fly"},
                {"fm", "application/vnd.framemaker"},
                {"fnc", "application/vnd.frogans.fnc"},
                {"for", "text/x-fortran"},
                {"fpx", "image/vnd.fpx"},
                {"frame", "application/vnd.framemaker"},
                {"fsc", "application/vnd.fsc.weblaunch"},
                {"fst", "image/vnd.fst"},
                {"ftc", "application/vnd.fluxtime.clip"},
                {"f", "text/x-fortran"},
                {"fti", "application/vnd.anser-web-funds-transfer-initiation"},
                {"fvt", "video/vnd.fvt"},
                {"fxp", "application/vnd.adobe.fxp"},
                {"fxpl", "application/vnd.adobe.fxp"},
                {"fzs", "application/vnd.fuzzysheet"},
                {"g2w", "application/vnd.geoplan"},
                {"g3", "image/g3fax"},
                {"g3w", "application/vnd.geospace"},
                {"gac", "application/vnd.groove-account"},
                {"gam", "application/x-tads"},
                {"gbr", "application/rpki-ghostbusters"},
                {"gca", "application/x-gca-compressed"},
                {"gdl", "model/vnd.gdl"},
                {"geo", "application/vnd.dynageo"},
                {"gex", "application/vnd.geometry-explorer"},
                {"ggb", "application/vnd.geogebra.file"},
                {"ggt", "application/vnd.geogebra.tool"},
                {"ghf", "application/vnd.groove-help"},
                {"gif", "image/gif"},
                {"gim", "application/vnd.groove-identity-message"},
                {"gml", "application/gml+xml"},
                {"gmx", "application/vnd.gmx"},
                {"gnumeric", "application/x-gnumeric"},
                {"gph", "application/vnd.flographit"},
                {"gpx", "application/gpx+xml"},
                {"gqf", "application/vnd.grafeq"},
                {"gqs", "application/vnd.grafeq"},
                {"gram", "application/srgs"},
                {"gramps", "application/x-gramps-xml"},
                {"gre", "application/vnd.geometry-explorer"},
                {"grv", "application/vnd.groove-injector"},
                {"grxml", "application/srgs+xml"},
                {"gsf", "application/x-font-ghostscript"},
                {"gtar", "application/x-gtar"},
                {"gtm", "application/vnd.groove-tool-message"},
                {"gtw", "model/vnd.gtw"},
                {"gv", "text/vnd.graphviz"},
                {"gxf", "application/gxf"},
                {"gxt", "application/vnd.geonext"},
                {"h261", "video/h261"},
                {"h263", "video/h263"},
                {"h264", "video/h264"},
                {"hal", "application/vnd.hal+xml"},
                {"hbci", "application/vnd.hbci"},
                {"hdf", "application/x-hdf"},
                {"hh", "text/x-c"},
                {"hlp", "application/winhlp"},
                {"hpgl", "application/vnd.hp-hpgl"},
                {"hpid", "application/vnd.hp-hpid"},
                {"hps", "application/vnd.hp-hps"},
                {"hqx", "application/mac-binhex40"},
                {"h", "text/x-c"},
                {"htke", "application/vnd.kenameaapp"},
                {"html", "text/html"},
                {"htm", "text/html"},
                {"hvd", "application/vnd.yamaha.hv-dic"},
                {"hvp", "application/vnd.yamaha.hv-voice"},
                {"hvs", "application/vnd.yamaha.hv-script"},
                {"i2g", "application/vnd.intergeo"},
                {"icc", "application/vnd.iccprofile"},
                {"ice", "x-conference/x-cooltalk"},
                {"icm", "application/vnd.iccprofile"},
                {"ico", "image/x-icon"},
                {"ics", "text/calendar"},
                {"ief", "image/ief"},
                {"ifb", "text/calendar"},
                {"ifm", "application/vnd.shana.informed.formdata"},
                {"iges", "model/iges"},
                {"igl", "application/vnd.igloader"},
                {"igm", "application/vnd.insors.igm"},
                {"igs", "model/iges"},
                {"igx", "application/vnd.micrografx.igx"},
                {"iif", "application/vnd.shana.informed.interchange"},
                {"imp", "application/vnd.accpac.simply.imp"},
                {"ims", "application/vnd.ms-ims"},
                {"ink", "application/inkml+xml"},
                {"inkml", "application/inkml+xml"},
                {"install", "application/x-install-instructions"},
                {"in", "text/plain"},
                {"iota", "application/vnd.astraea-software.iota"},
                {"ipfix", "application/ipfix"},
                {"ipk", "application/vnd.shana.informed.package"},
                {"irm", "application/vnd.ibm.rights-management"},
                {"irp", "application/vnd.irepository.package+xml"},
                {"iso", "application/x-iso9660-image"},
                {"itp", "application/vnd.shana.informed.formtemplate"},
                {"ivp", "application/vnd.immervision-ivp"},
                {"ivu", "application/vnd.immervision-ivu"},
                {"jad", "text/vnd.sun.j2me.app-descriptor"},
                {"jam", "application/vnd.jam"},
                {"jar", "application/java-archive"},
                {"java", "text/x-java-source"},
                {"jisp", "application/vnd.jisp"},
                {"jlt", "application/vnd.hp-jlyt"},
                {"jnlp", "application/x-java-jnlp-file"},
                {"joda", "application/vnd.joost.joda-archive"},
                {"jpeg", "image/jpeg"},
                {"jpe", "image/jpeg"},
                {"jpg", "image/jpeg"},
                {"jpgm", "video/jpm"},
                {"jpgv", "video/jpeg"},
                {"jpm", "video/jpm"},
                {"js", "application/javascript"},
                {"json", "application/json"},
                {"jsonml", "application/jsonml+json"},
                {"kar", "audio/midi"},
                {"karbon", "application/vnd.kde.karbon"},
                {"kfo", "application/vnd.kde.kformula"},
                {"kia", "application/vnd.kidspiration"},
                {"kml", "application/vnd.google-earth.kml+xml"},
                {"kmz", "application/vnd.google-earth.kmz"},
                {"kne", "application/vnd.kinar"},
                {"knp", "application/vnd.kinar"},
                {"kon", "application/vnd.kde.kontour"},
                {"kpr", "application/vnd.kde.kpresenter"},
                {"kpt", "application/vnd.kde.kpresenter"},
                {"kpxx", "application/vnd.ds-keypoint"},
                {"ksp", "application/vnd.kde.kspread"},
                {"ktr", "application/vnd.kahootz"},
                {"ktx", "image/ktx"},
                {"ktz", "application/vnd.kahootz"},
                {"kwd", "application/vnd.kde.kword"},
                {"kwt", "application/vnd.kde.kword"},
                {"lasxml", "application/vnd.las.las+xml"},
                {"latex", "application/x-latex"},
                {"lbd", "application/vnd.llamagraphics.life-balance.desktop"},
                {"lbe", "application/vnd.llamagraphics.life-balance.exchange+xml"},
                {"les", "application/vnd.hhe.lesson-player"},
                {"lha", "application/x-lzh-compressed"},
                {"link66", "application/vnd.route66.link66+xml"},
                {"list3820", "application/vnd.ibm.modcap"},
                {"listafp", "application/vnd.ibm.modcap"},
                {"list", "text/plain"},
                {"lnk", "application/x-ms-shortcut"},
                {"log", "text/plain"},
                {"lostxml", "application/lost+xml"},
                {"lrf", "application/octet-stream"},
                {"lrm", "application/vnd.ms-lrm"},
                {"ltf", "application/vnd.frogans.ltf"},
                {"lvp", "audio/vnd.lucent.voice"},
                {"lwp", "application/vnd.lotus-wordpro"},
                {"lzh", "application/x-lzh-compressed"},
                {"m13", "application/x-msmediaview"},
                {"m14", "application/x-msmediaview"},
                {"m1v", "video/mpeg"},
                {"m21", "application/mp21"},
                {"m2a", "audio/mpeg"},
                {"m2v", "video/mpeg"},
                {"m3a", "audio/mpeg"},
                {"m3u8", "application/vnd.apple.mpegurl"},
                {"m3u", "audio/x-mpegurl"},
                {"m4u", "video/vnd.mpegurl"},
                {"m4v", "video/x-m4v"},
                {"ma", "application/mathematica"},
                {"mads", "application/mads+xml"},
                {"mag", "application/vnd.ecowin.chart"},
                {"maker", "application/vnd.framemaker"},
                {"man", "text/troff"},
                {"mar", "application/octet-stream"},
                {"mathml", "application/mathml+xml"},
                {"mb", "application/mathematica"},
                {"mbk", "application/vnd.mobius.mbk"},
                {"mbox", "application/mbox"},
                {"mc1", "application/vnd.medcalcdata"},
                {"mcd", "application/vnd.mcd"},
                {"mcurl", "text/vnd.curl.mcurl"},
                {"mdb", "application/x-msaccess"},
                {"mdi", "image/vnd.ms-modi"},
                {"mesh", "model/mesh"},
                {"meta4", "application/metalink4+xml"},
                {"metalink", "application/metalink+xml"},
                {"me", "text/troff"},
                {"mets", "application/mets+xml"},
                {"mfm", "application/vnd.mfmp"},
                {"mft", "application/rpki-manifest"},
                {"mgp", "application/vnd.osgeo.mapguide.package"},
                {"mgz", "application/vnd.proteus.magazine"},
                {"mid", "audio/midi"},
                {"midi", "audio/midi"},
                {"mie", "application/x-mie"},
                {"mif", "application/vnd.mif"},
                {"mime", "message/rfc822"},
                {"mj2", "video/mj2"},
                {"mjp2", "video/mj2"},
                {"mk3d", "video/x-matroska"},
                {"mka", "audio/x-matroska"},
                {"mks", "video/x-matroska"},
                {"mkv", "video/x-matroska"},
                {"mlp", "application/vnd.dolby.mlp"},
                {"mmd", "application/vnd.chipnuts.karaoke-mmd"},
                {"mmf", "application/vnd.smaf"},
                {"mmr", "image/vnd.fujixerox.edmics-mmr"},
                {"mng", "video/x-mng"},
                {"mny", "application/x-msmoney"},
                {"mobi", "application/x-mobipocket-ebook"},
                {"mods", "application/mods+xml"},
                {"movie", "video/x-sgi-movie"},
                {"mov", "video/quicktime"},
                {"mp21", "application/mp21"},
                {"mp2a", "audio/mpeg"},
                {"mp2", "audio/mpeg"},
                {"mp3", "audio/mpeg"},
                {"mp4a", "audio/mp4"},
                {"mp4s", "application/mp4"},
                {"mp4", "video/mp4"},
                {"mp4v", "video/mp4"},
                {"mpc", "application/vnd.mophun.certificate"},
                {"mpeg", "video/mpeg"},
                {"mpe", "video/mpeg"},
                {"mpg4", "video/mp4"},
                {"mpga", "audio/mpeg"},
                {"mpg", "video/mpeg"},
                {"mpkg", "application/vnd.apple.installer+xml"},
                {"mpm", "application/vnd.blueice.multipass"},
                {"mpn", "application/vnd.mophun.application"},
                {"mpp", "application/vnd.ms-project"},
                {"mpt", "application/vnd.ms-project"},
                {"mpy", "application/vnd.ibm.minipay"},
                {"mqy", "application/vnd.mobius.mqy"},
                {"mrc", "application/marc"},
                {"mrcx", "application/marcxml+xml"},
                {"mscml", "application/mediaservercontrol+xml"},
                {"mseed", "application/vnd.fdsn.mseed"},
                {"mseq", "application/vnd.mseq"},
                {"msf", "application/vnd.epson.msf"},
                {"msh", "model/mesh"},
                {"msi", "application/x-msdownload"},
                {"msl", "application/vnd.mobius.msl"},
                {"ms", "text/troff"},
                {"msty", "application/vnd.muvee.style"},
                {"mts", "model/vnd.mts"},
                {"mus", "application/vnd.musician"},
                {"musicxml", "application/vnd.recordare.musicxml+xml"},
                {"mvb", "application/x-msmediaview"},
                {"mwf", "application/vnd.mfer"},
                {"mxf", "application/mxf"},
                {"mxl", "application/vnd.recordare.musicxml"},
                {"mxml", "application/xv+xml"},
                {"mxs", "application/vnd.triscape.mxs"},
                {"mxu", "video/vnd.mpegurl"},
                {"n3", "text/n3"},
                {"nb", "application/mathematica"},
                {"nbp", "application/vnd.wolfram.player"},
                {"nc", "application/x-netcdf"},
                {"ncx", "application/x-dtbncx+xml"},
                {"nfo", "text/x-nfo"},
                {"n-gage", "application/vnd.nokia.n-gage.symbian.install"},
                {"ngdat", "application/vnd.nokia.n-gage.data"},
                {"nitf", "application/vnd.nitf"},
                {"nlu", "application/vnd.neurolanguage.nlu"},
                {"nml", "application/vnd.enliven"},
                {"nnd", "application/vnd.noblenet-directory"},
                {"nns", "application/vnd.noblenet-sealer"},
                {"nnw", "application/vnd.noblenet-web"},
                {"npx", "image/vnd.net-fpx"},
                {"nsc", "application/x-conference"},
                {"nsf", "application/vnd.lotus-notes"},
                {"ntf", "application/vnd.nitf"},
                {"nzb", "application/x-nzb"},
                {"oa2", "application/vnd.fujitsu.oasys2"},
                {"oa3", "application/vnd.fujitsu.oasys3"},
                {"oas", "application/vnd.fujitsu.oasys"},
                {"obd", "application/x-msbinder"},
                {"obj", "application/x-tgif"},
                {"oda", "application/oda"},
                {"odb", "application/vnd.oasis.opendocument.database"},
                {"odc", "application/vnd.oasis.opendocument.chart"},
                {"odf", "application/vnd.oasis.opendocument.formula"},
                {"odft", "application/vnd.oasis.opendocument.formula-template"},
                {"odg", "application/vnd.oasis.opendocument.graphics"},
                {"odi", "application/vnd.oasis.opendocument.image"},
                {"odm", "application/vnd.oasis.opendocument.text-master"},
                {"odp", "application/vnd.oasis.opendocument.presentation"},
                {"ods", "application/vnd.oasis.opendocument.spreadsheet"},
                {"odt", "application/vnd.oasis.opendocument.text"},
                {"oga", "audio/ogg"},
                {"ogg", "audio/ogg"},
                {"ogv", "video/ogg"},
                {"ogx", "application/ogg"},
                {"omdoc", "application/omdoc+xml"},
                {"onepkg", "application/onenote"},
                {"onetmp", "application/onenote"},
                {"onetoc2", "application/onenote"},
                {"onetoc", "application/onenote"},
                {"opf", "application/oebps-package+xml"},
                {"opml", "text/x-opml"},
                {"oprc", "application/vnd.palm"},
                {"org", "application/vnd.lotus-organizer"},
                {"osf", "application/vnd.yamaha.openscoreformat"},
                {"osfpvg", "application/vnd.yamaha.openscoreformat.osfpvg+xml"},
                {"otc", "application/vnd.oasis.opendocument.chart-template"},
                {"otf", "application/x-font-otf"},
                {"otg", "application/vnd.oasis.opendocument.graphics-template"},
                {"oth", "application/vnd.oasis.opendocument.text-web"},
                {"oti", "application/vnd.oasis.opendocument.image-template"},
                {"otp", "application/vnd.oasis.opendocument.presentation-template"},
                {"ots", "application/vnd.oasis.opendocument.spreadsheet-template"},
                {"ott", "application/vnd.oasis.opendocument.text-template"},
                {"oxps", "application/oxps"},
                {"oxt", "application/vnd.openofficeorg.extension"},
                {"p10", "application/pkcs10"},
                {"p12", "application/x-pkcs12"},
                {"p7b", "application/x-pkcs7-certificates"},
                {"p7c", "application/pkcs7-mime"},
                {"p7m", "application/pkcs7-mime"},
                {"p7r", "application/x-pkcs7-certreqresp"},
                {"p7s", "application/pkcs7-signature"},
                {"p8", "application/pkcs8"},
                {"pas", "text/x-pascal"},
                {"paw", "application/vnd.pawaafile"},
                {"pbd", "application/vnd.powerbuilder6"},
                {"pbm", "image/x-portable-bitmap"},
                {"pcap", "application/vnd.tcpdump.pcap"},
                {"pcf", "application/x-font-pcf"},
                {"pcl", "application/vnd.hp-pcl"},
                {"pclxl", "application/vnd.hp-pclxl"},
                {"pct", "image/x-pict"},
                {"pcurl", "application/vnd.curl.pcurl"},
                {"pcx", "image/x-pcx"},
                {"pdb", "application/vnd.palm"},
                {"pdf", "application/pdf"},
                {"pfa", "application/x-font-type1"},
                {"pfb", "application/x-font-type1"},
                {"pfm", "application/x-font-type1"},
                {"pfr", "application/font-tdpfr"},
                {"pfx", "application/x-pkcs12"},
                {"pgm", "image/x-portable-graymap"},
                {"pgn", "application/x-chess-pgn"},
                {"pgp", "application/pgp-encrypted"},
                {"pic", "image/x-pict"},
                {"pkg", "application/octet-stream"},
                {"pki", "application/pkixcmp"},
                {"pkipath", "application/pkix-pkipath"},
                {"plb", "application/vnd.3gpp.pic-bw-large"},
                {"plc", "application/vnd.mobius.plc"},
                {"plf", "application/vnd.pocketlearn"},
                {"pls", "application/pls+xml"},
                {"pml", "application/vnd.ctc-posml"},
                {"png", "image/png"},
                {"pnm", "image/x-portable-anymap"},
                {"portpkg", "application/vnd.macports.portpkg"},
                {"pot", "application/vnd.ms-powerpoint"},
                {"potm", "application/vnd.ms-powerpoint.template.macroenabled.12"},
                {"potx", "application/vnd.openxmlformats-officedocument.presentationml.template"},
                {"ppam", "application/vnd.ms-powerpoint.addin.macroenabled.12"},
                {"ppd", "application/vnd.cups-ppd"},
                {"ppm", "image/x-portable-pixmap"},
                {"pps", "application/vnd.ms-powerpoint"},
                {"ppsm", "application/vnd.ms-powerpoint.slideshow.macroenabled.12"},
                {"ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"},
                {"ppt", "application/vnd.ms-powerpoint"},
                {"pptm", "application/vnd.ms-powerpoint.presentation.macroenabled.12"},
                {"pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
                {"pqa", "application/vnd.palm"},
                {"prc", "application/x-mobipocket-ebook"},
                {"pre", "application/vnd.lotus-freelance"},
                {"prf", "application/pics-rules"},
                {"ps", "application/postscript"},
                {"psb", "application/vnd.3gpp.pic-bw-small"},
                {"psd", "image/vnd.adobe.photoshop"},
                {"psf", "application/x-font-linux-psf"},
                {"pskcxml", "application/pskc+xml"},
                {"p", "text/x-pascal"},
                {"ptid", "application/vnd.pvi.ptid1"},
                {"pub", "application/x-mspublisher"},
                {"pvb", "application/vnd.3gpp.pic-bw-var"},
                {"pwn", "application/vnd.3m.post-it-notes"},
                {"pya", "audio/vnd.ms-playready.media.pya"},
                {"pyv", "video/vnd.ms-playready.media.pyv"},
                {"qam", "application/vnd.epson.quickanime"},
                {"qbo", "application/vnd.intu.qbo"},
                {"qfx", "application/vnd.intu.qfx"},
                {"qps", "application/vnd.publishare-delta-tree"},
                {"qt", "video/quicktime"},
                {"qwd", "application/vnd.quark.quarkxpress"},
                {"qwt", "application/vnd.quark.quarkxpress"},
                {"qxb", "application/vnd.quark.quarkxpress"},
                {"qxd", "application/vnd.quark.quarkxpress"},
                {"qxl", "application/vnd.quark.quarkxpress"},
                {"qxt", "application/vnd.quark.quarkxpress"},
                {"ra", "audio/x-pn-realaudio"},
                {"ram", "audio/x-pn-realaudio"},
                {"rar", "application/x-rar-compressed"},
                {"ras", "image/x-cmu-raster"},
                {"rcprofile", "application/vnd.ipunplugged.rcprofile"},
                {"rdf", "application/rdf+xml"},
                {"rdz", "application/vnd.data-vision.rdz"},
                {"rep", "application/vnd.businessobjects"},
                {"res", "application/x-dtbresource+xml"},
                {"rgb", "image/x-rgb"},
                {"rif", "application/reginfo+xml"},
                {"rip", "audio/vnd.rip"},
                {"ris", "application/x-research-info-systems"},
                {"rl", "application/resource-lists+xml"},
                {"rlc", "image/vnd.fujixerox.edmics-rlc"},
                {"rld", "application/resource-lists-diff+xml"},
                {"rm", "application/vnd.rn-realmedia"},
                {"rmi", "audio/midi"},
                {"rmp", "audio/x-pn-realaudio-plugin"},
                {"rms", "application/vnd.jcp.javame.midlet-rms"},
                {"rmvb", "application/vnd.rn-realmedia-vbr"},
                {"rnc", "application/relax-ng-compact-syntax"},
                {"roa", "application/rpki-roa"},
                {"roff", "text/troff"},
                {"rp9", "application/vnd.cloanto.rp9"},
                {"rpss", "application/vnd.nokia.radio-presets"},
                {"rpst", "application/vnd.nokia.radio-preset"},
                {"rq", "application/sparql-query"},
                {"rs", "application/rls-services+xml"},
                {"rsd", "application/rsd+xml"},
                {"rss", "application/rss+xml"},
                {"rtf", "application/rtf"},
                {"rtx", "text/richtext"},
                {"s3m", "audio/s3m"},
                {"saf", "application/vnd.yamaha.smaf-audio"},
                {"sbml", "application/sbml+xml"},
                {"sc", "application/vnd.ibm.secure-container"},
                {"scd", "application/x-msschedule"},
                {"scm", "application/vnd.lotus-screencam"},
                {"scq", "application/scvp-cv-request"},
                {"scs", "application/scvp-cv-response"},
                {"scurl", "text/vnd.curl.scurl"},
                {"sda", "application/vnd.stardivision.draw"},
                {"sdc", "application/vnd.stardivision.calc"},
                {"sdd", "application/vnd.stardivision.impress"},
                {"sdkd", "application/vnd.solent.sdkm+xml"},
                {"sdkm", "application/vnd.solent.sdkm+xml"},
                {"sdp", "application/sdp"},
                {"sdw", "application/vnd.stardivision.writer"},
                {"see", "application/vnd.seemail"},
                {"seed", "application/vnd.fdsn.seed"},
                {"sema", "application/vnd.sema"},
                {"semd", "application/vnd.semd"},
                {"semf", "application/vnd.semf"},
                {"ser", "application/java-serialized-object"},
                {"setpay", "application/set-payment-initiation"},
                {"setreg", "application/set-registration-initiation"},
                {"sfd-hdstx", "application/vnd.hydrostatix.sof-data"},
                {"sfs", "application/vnd.spotfire.sfs"},
                {"sfv", "text/x-sfv"},
                {"sgi", "image/sgi"},
                {"sgl", "application/vnd.stardivision.writer-global"},
                {"sgml", "text/sgml"},
                {"sgm", "text/sgml"},
                {"sh", "application/x-sh"},
                {"shar", "application/x-shar"},
                {"shf", "application/shf+xml"},
                {"sid", "image/x-mrsid-image"},
                {"sig", "application/pgp-signature"},
                {"sil", "audio/silk"},
                {"silo", "model/mesh"},
                {"sis", "application/vnd.symbian.install"},
                {"sisx", "application/vnd.symbian.install"},
                {"sit", "application/x-stuffit"},
                {"sitx", "application/x-stuffitx"},
                {"skd", "application/vnd.koan"},
                {"skm", "application/vnd.koan"},
                {"skp", "application/vnd.koan"},
                {"skt", "application/vnd.koan"},
                {"sldm", "application/vnd.ms-powerpoint.slide.macroenabled.12"},
                {"sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"},
                {"slt", "application/vnd.epson.salt"},
                {"sm", "application/vnd.stepmania.stepchart"},
                {"smf", "application/vnd.stardivision.math"},
                {"smi", "application/smil+xml"},
                {"smil", "application/smil+xml"},
                {"smv", "video/x-smv"},
                {"smzip", "application/vnd.stepmania.package"},
                {"snd", "audio/basic"},
                {"snf", "application/x-font-snf"},
                {"so", "application/octet-stream"},
                {"spc", "application/x-pkcs7-certificates"},
                {"spf", "application/vnd.yamaha.smaf-phrase"},
                {"spl", "application/x-futuresplash"},
                {"spot", "text/vnd.in3d.spot"},
                {"spp", "application/scvp-vp-response"},
                {"spq", "application/scvp-vp-request"},
                {"spx", "audio/ogg"},
                {"sql", "application/x-sql"},
                {"src", "application/x-wais-source"},
                {"srt", "application/x-subrip"},
                {"sru", "application/sru+xml"},
                {"srx", "application/sparql-results+xml"},
                {"ssdl", "application/ssdl+xml"},
                {"sse", "application/vnd.kodak-descriptor"},
                {"ssf", "application/vnd.epson.ssf"},
                {"ssml", "application/ssml+xml"},
                {"st", "application/vnd.sailingtracker.track"},
                {"stc", "application/vnd.sun.xml.calc.template"},
                {"std", "application/vnd.sun.xml.draw.template"},
                {"s", "text/x-asm"},
                {"stf", "application/vnd.wt.stf"},
                {"sti", "application/vnd.sun.xml.impress.template"},
                {"stk", "application/hyperstudio"},
                {"stl", "application/vnd.ms-pki.stl"},
                {"str", "application/vnd.pg.format"},
                {"stw", "application/vnd.sun.xml.writer.template"},
                {"sub", "image/vnd.dvb.subtitle"},
                {"sub", "text/vnd.dvb.subtitle"},
                {"sus", "application/vnd.sus-calendar"},
                {"susp", "application/vnd.sus-calendar"},
                {"sv4cpio", "application/x-sv4cpio"},
                {"sv4crc", "application/x-sv4crc"},
                {"svc", "application/vnd.dvb.service"},
                {"svd", "application/vnd.svd"},
                {"svg", "image/svg+xml"},
                {"svgz", "image/svg+xml"},
                {"swa", "application/x-director"},
                {"swf", "application/x-shockwave-flash"},
                {"swi", "application/vnd.aristanetworks.swi"},
                {"sxc", "application/vnd.sun.xml.calc"},
                {"sxd", "application/vnd.sun.xml.draw"},
                {"sxg", "application/vnd.sun.xml.writer.global"},
                {"sxi", "application/vnd.sun.xml.impress"},
                {"sxm", "application/vnd.sun.xml.math"},
                {"sxw", "application/vnd.sun.xml.writer"},
                {"t3", "application/x-t3vm-image"},
                {"taglet", "application/vnd.mynfc"},
                {"tao", "application/vnd.tao.intent-module-archive"},
                {"tar", "application/x-tar"},
                {"tcap", "application/vnd.3gpp2.tcap"},
                {"tcl", "application/x-tcl"},
                {"teacher", "application/vnd.smart.teacher"},
                {"tei", "application/tei+xml"},
                {"teicorpus", "application/tei+xml"},
                {"tex", "application/x-tex"},
                {"texi", "application/x-texinfo"},
                {"texinfo", "application/x-texinfo"},
                {"text", "text/plain"},
                {"tfi", "application/thraud+xml"},
                {"tfm", "application/x-tex-tfm"},
                {"tga", "image/x-tga"},
                {"thmx", "application/vnd.ms-officetheme"},
                {"tiff", "image/tiff"},
                {"tif", "image/tiff"},
                {"tmo", "application/vnd.tmobile-livetv"},
                {"torrent", "application/x-bittorrent"},
                {"tpl", "application/vnd.groove-tool-template"},
                {"tpt", "application/vnd.trid.tpt"},
                {"tra", "application/vnd.trueapp"},
                {"trm", "application/x-msterminal"},
                {"tr", "text/troff"},
                {"tsd", "application/timestamped-data"},
                {"tsv", "text/tab-separated-values"},
                {"ttc", "application/x-font-ttf"},
                {"t", "text/troff"},
                {"ttf", "application/x-font-ttf"},
                {"ttl", "text/turtle"},
                {"twd", "application/vnd.simtech-mindmapper"},
                {"twds", "application/vnd.simtech-mindmapper"},
                {"txd", "application/vnd.genomatix.tuxedo"},
                {"txf", "application/vnd.mobius.txf"},
                {"txt", "text/plain"},
                {"u32", "application/x-authorware-bin"},
                {"udeb", "application/x-debian-package"},
                {"ufd", "application/vnd.ufdl"},
                {"ufdl", "application/vnd.ufdl"},
                {"ulx", "application/x-glulx"},
                {"umj", "application/vnd.umajin"},
                {"unityweb", "application/vnd.unity"},
                {"uoml", "application/vnd.uoml+xml"},
                {"uris", "text/uri-list"},
                {"uri", "text/uri-list"},
                {"urls", "text/uri-list"},
                {"ustar", "application/x-ustar"},
                {"utz", "application/vnd.uiq.theme"},
                {"uu", "text/x-uuencode"},
                {"uva", "audio/vnd.dece.audio"},
                {"uvd", "application/vnd.dece.data"},
                {"uvf", "application/vnd.dece.data"},
                {"uvg", "image/vnd.dece.graphic"},
                {"uvh", "video/vnd.dece.hd"},
                {"uvi", "image/vnd.dece.graphic"},
                {"uvm", "video/vnd.dece.mobile"},
                {"uvp", "video/vnd.dece.pd"},
                {"uvs", "video/vnd.dece.sd"},
                {"uvt", "application/vnd.dece.ttml+xml"},
                {"uvu", "video/vnd.uvvu.mp4"},
                {"uvva", "audio/vnd.dece.audio"},
                {"uvvd", "application/vnd.dece.data"},
                {"uvvf", "application/vnd.dece.data"},
                {"uvvg", "image/vnd.dece.graphic"},
                {"uvvh", "video/vnd.dece.hd"},
                {"uvvi", "image/vnd.dece.graphic"},
                {"uvvm", "video/vnd.dece.mobile"},
                {"uvvp", "video/vnd.dece.pd"},
                {"uvvs", "video/vnd.dece.sd"},
                {"uvvt", "application/vnd.dece.ttml+xml"},
                {"uvvu", "video/vnd.uvvu.mp4"},
                {"uvv", "video/vnd.dece.video"},
                {"uvvv", "video/vnd.dece.video"},
                {"uvvx", "application/vnd.dece.unspecified"},
                {"uvvz", "application/vnd.dece.zip"},
                {"uvx", "application/vnd.dece.unspecified"},
                {"uvz", "application/vnd.dece.zip"},
                {"vcard", "text/vcard"},
                {"vcd", "application/x-cdlink"},
                {"vcf", "text/x-vcard"},
                {"vcg", "application/vnd.groove-vcard"},
                {"vcs", "text/x-vcalendar"},
                {"vcx", "application/vnd.vcx"},
                {"vis", "application/vnd.visionary"},
                {"viv", "video/vnd.vivo"},
                {"vob", "video/x-ms-vob"},
                {"vor", "application/vnd.stardivision.writer"},
                {"vox", "application/x-authorware-bin"},
                {"vrml", "model/vrml"},
                {"vsd", "application/vnd.visio"},
                {"vsf", "application/vnd.vsf"},
                {"vss", "application/vnd.visio"},
                {"vst", "application/vnd.visio"},
                {"vsw", "application/vnd.visio"},
                {"vtu", "model/vnd.vtu"},
                {"vxml", "application/voicexml+xml"},
                {"w3d", "application/x-director"},
                {"wad", "application/x-doom"},
                {"wav", "audio/x-wav"},
                {"wax", "audio/x-ms-wax"},
                {"wbmp", "image/vnd.wap.wbmp"},
                {"wbs", "application/vnd.criticaltools.wbs+xml"},
                {"wbxml", "application/vnd.wap.wbxml"},
                {"wcm", "application/vnd.ms-works"},
                {"wdb", "application/vnd.ms-works"},
                {"wdp", "image/vnd.ms-photo"},
                {"weba", "audio/webm"},
                {"webm", "video/webm"},
                {"webp", "image/webp"},
                {"wg", "application/vnd.pmi.widget"},
                {"wgt", "application/widget"},
                {"wks", "application/vnd.ms-works"},
                {"wma", "audio/x-ms-wma"},
                {"wmd", "application/x-ms-wmd"},
                {"wmf", "application/x-msmetafile"},
                {"wmlc", "application/vnd.wap.wmlc"},
                {"wmlsc", "application/vnd.wap.wmlscriptc"},
                {"wmls", "text/vnd.wap.wmlscript"},
                {"wml", "text/vnd.wap.wml"},
                {"wm", "video/x-ms-wm"},
                {"wmv", "video/x-ms-wmv"},
                {"wmx", "video/x-ms-wmx"},
                {"wmz", "application/x-msmetafile"},
                {"wmz", "application/x-ms-wmz"},
                {"woff", "application/x-font-woff"},
                {"wpd", "application/vnd.wordperfect"},
                {"wpl", "application/vnd.ms-wpl"},
                {"wps", "application/vnd.ms-works"},
                {"wqd", "application/vnd.wqd"},
                {"wri", "application/x-mswrite"},
                {"wrl", "model/vrml"},
                {"wsdl", "application/wsdl+xml"},
                {"wspolicy", "application/wspolicy+xml"},
                {"wtb", "application/vnd.webturbo"},
                {"wvx", "video/x-ms-wvx"},
                {"x32", "application/x-authorware-bin"},
                {"x3db", "model/x3d+binary"},
                {"x3dbz", "model/x3d+binary"},
                {"x3d", "model/x3d+xml"},
                {"x3dv", "model/x3d+vrml"},
                {"x3dvz", "model/x3d+vrml"},
                {"x3dz", "model/x3d+xml"},
                {"xaml", "application/xaml+xml"},
                {"xap", "application/x-silverlight-app"},
                {"xar", "application/vnd.xara"},
                {"xbap", "application/x-ms-xbap"},
                {"xbd", "application/vnd.fujixerox.docuworks.binder"},
                {"xbm", "image/x-xbitmap"},
                {"xdf", "application/xcap-diff+xml"},
                {"xdm", "application/vnd.syncml.dm+xml"},
                {"xdp", "application/vnd.adobe.xdp+xml"},
                {"xdssc", "application/dssc+xml"},
                {"xdw", "application/vnd.fujixerox.docuworks"},
                {"xenc", "application/xenc+xml"},
                {"xer", "application/patch-ops-error+xml"},
                {"xfdf", "application/vnd.adobe.xfdf"},
                {"xfdl", "application/vnd.xfdl"},
                {"xht", "application/xhtml+xml"},
                {"xhtml", "application/xhtml+xml"},
                {"xhvml", "application/xv+xml"},
                {"xif", "image/vnd.xiff"},
                {"xla", "application/vnd.ms-excel"},
                {"xlam", "application/vnd.ms-excel.addin.macroenabled.12"},
                {"xlc", "application/vnd.ms-excel"},
                {"xlf", "application/x-xliff+xml"},
                {"xlm", "application/vnd.ms-excel"},
                {"xls", "application/vnd.ms-excel"},
                {"xlsb", "application/vnd.ms-excel.sheet.binary.macroenabled.12"},
                {"xlsm", "application/vnd.ms-excel.sheet.macroenabled.12"},
                {"xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
                {"xlt", "application/vnd.ms-excel"},
                {"xltm", "application/vnd.ms-excel.template.macroenabled.12"},
                {"xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
                {"xlw", "application/vnd.ms-excel"},
                {"xm", "audio/xm"},
                {"xml", "application/xml"},
                {"xo", "application/vnd.olpc-sugar"},
                {"xop", "application/xop+xml"},
                {"xpi", "application/x-xpinstall"},
                {"xpl", "application/xproc+xml"},
                {"xpm", "image/x-xpixmap"},
                {"xpr", "application/vnd.is-xpr"},
                {"xps", "application/vnd.ms-xpsdocument"},
                {"xpw", "application/vnd.intercon.formnet"},
                {"xpx", "application/vnd.intercon.formnet"},
                {"xsl", "application/xml"},
                {"xslt", "application/xslt+xml"},
                {"xsm", "application/vnd.syncml+xml"},
                {"xspf", "application/xspf+xml"},
                {"xul", "application/vnd.mozilla.xul+xml"},
                {"xvm", "application/xv+xml"},
                {"xvml", "application/xv+xml"},
                {"xwd", "image/x-xwindowdump"},
                {"xyz", "chemical/x-xyz"},
                {"xz", "application/x-xz"},
                {"yang", "application/yang"},
                {"yin", "application/yin+xml"},
                {"z1", "application/x-zmachine"},
                {"z2", "application/x-zmachine"},
                {"z3", "application/x-zmachine"},
                {"z4", "application/x-zmachine"},
                {"z5", "application/x-zmachine"},
                {"z6", "application/x-zmachine"},
                {"z7", "application/x-zmachine"},
                {"z8", "application/x-zmachine"},
                {"zaz", "application/vnd.zzazz.deck+xml"},
                {"zip", "application/zip"},
                {"zir", "application/vnd.zul"},
                {"zirz", "application/vnd.zul"},
                {"zmm", "application/vnd.handheld-entertainment+xml"}
            };

            for (int x = 0; x < types.GetLength(0); ++x)
            {
                string extension = types[x, 0];
                string mime = types[x, 1];
                //MIMETypesDictionary.Add(types[x, 0], types[x, 1]);
                //if (!mime2extension.ContainsKey(mime))
                //{
                //    mime2extension.Add(mime, extension);
                //}
                if (!extension2mime.ContainsKey(extension))
                {
                    extension2mime.Add(extension, mime);
                }
            }
        }


        /// <summary>
        /// Dictionary of the most common filename extensions and associated MIME types.
        /// List generated by https://github.com/nicolas-raoul/Filename_Extension_To_MIME_Type
        /// </summary>
        //private static readonly BiDictionary<string, string> MIMETypesDictionary =
        //    new BiDictionary<string, string>();// StringComparer.OrdinalIgnoreCase);

        //private static readonly Dictionary<string, string> mime2extension = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
        private static readonly Dictionary<string, string> extension2mime = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
    }
}
